package com.daily.daily_push.dify;

/**
 *  在知识库新增 文件
 */
import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

public class DifyApiUploader {

    public static void main(String[] args) {
        // ======================= 1. 配置您的信息 =======================
        // API 地址
        String apiUrl = "http://localhost/v1/datasets/610a5388-806d-4ed2-bafa-5e3b6494ef45/document/create-by-file";

        // API 密钥
        String apiKey = "Bearer dataset-e9njBMeGxrHx4b2dRIJThTGr";

        // 【【【请修改这里】】】要上传的本地文件的完整路径
        // 例如：在 Windows 上是 "C:/docs/my-document.txt"
        // 例如：在 Linux/Mac 上是 "/home/user/docs/my-document.txt"
        String filePath = "D:\\TestFile\\商管问答知识库模板.docx"; // <--- 修改这里

        // ======================= 2. 准备请求数据 =======================
        // 准备 data 字段的 JSON 字符串
        String jsonData = "{"
                + "\"indexing_technique\": \"economy\","
                + "\"doc_form\": \"text_model\","
                + "\"process_rule\": {"
                + "    \"mode\": \"automatic\","
                + "    \"rules\": {}"
                + "}"
                + "}";

        // 检查文件是否存在
        File file = new File(filePath);
        if (!file.exists()) {
            System.err.println("错误：文件不存在，请检查路径 -> " + filePath);
            return;
        }

        // 使用 HashMap 构建 multipart/form-data
        // Hutool 会自动识别 File 对象并将其作为文件部分处理
        Map<String, Object> formMap = new HashMap<>();
        formMap.put("data", jsonData); // 这是 JSON 字符串部分
        formMap.put("file", file);     // 这是文件部分

        // ======================= 3. 发送 HTTP 请求 =======================
        System.out.println("正在上传文件: " + file.getName() + " 到 Dify 知识库...");

        try {
            // 使用 Hutool 构建并发送请求
            // .header() 设置请求头
            // .form() 设置表单数据
            // .execute() 执行请求
            HttpResponse response = HttpRequest.post(apiUrl)
                    .header("Authorization", apiKey)
                    .form(formMap)
                    .timeout(20000) // 设置超时，单位毫秒
                    .execute();

            // ======================= 4. 处理响应结果 =======================
            // 检查响应状态码
            if (response.isOk()) {
                System.out.println("上传成功！");
                System.out.println("服务器响应状态码: " + response.getStatus());
                System.out.println("服务器响应内容: ");
                System.out.println(response.body());
            } else {
                System.err.println("上传失败！");
                System.err.println("服务器响应状态码: " + response.getStatus());
                System.err.println("错误信息: ");
                System.err.println(response.body());
            }

        } catch (Exception e) {
            System.err.println("请求发生异常！");
            e.printStackTrace();
        }
    }
}